Механізм повідомлень у Windows.
Первинність даних, механізм повідомлень.
В ООП первинні дані називаються повідомленнями. Так само як і в Windows модель даних керуючись об’єктами реалізується за допомогою спеціального механізму повідомлень, більше повідомлень, які отримує об’єкт. Вікно виникає в результаті дій користувачів, але ідея повідомлень значно глибша. Повідомлення – потужний і єдиний засіб зв’язку вікна всього продукту з ОС Windows. Через повідомлення вікно отримує інформацію про всі події в системі Windows, які мають відношення до деякого вікна.
Саме механізм повідомлень дозволяє реалізувати багато віконне операційне середовище.
Приклад: взаємодія Windows та програмного продукту при обробці клавіш.
Драйвери клавіш викликають продукт в модуль user.exe, яка і формує відповідне повідомлення.
Повідомлення, яке розміщене в системній черзі розподіляється потім по продуктам. Для кожного продукту Windows створює і підтримує окрему чергу продукту. Розподілення полягає в тому, що повідомлення береться із системної черги і визначає, якому вікну належить дане повідомлення і це повідомлення розміщується в чергу продукту, якому належить вікно. Цю роботу виконує user.exe, а обробка черги продукту виконує сам продукт, який бере повідомлення з черги, перетворюючи їх в повідомлення стандарту ansi і направляє у відповідну функцію вікна продукту. І конкретні дії по даному повідомленню робляться функцією вікна. Як Windows визначає якому продукту направляти повідомлення, оскільки багатозадачна система, але один користувач в кожен конкретний момент часу працює тільки з одним вікном. Продукт, що попадає в повідомлення від клавіш має в цей момент фокус вводу.
Системна черга є тим засобом, який розподіляє повідомлення по продукту, але якщо заздалегідь відомо, якому продукту належить те або інше повідомлення, то воно одразу розміщується в чергу продуктів повз системну чергу. Таким чином в Windows в повній мірі реалізована основна ідея ООП. Дані керуються об’єктами, тобто функціями вікна Windows. Windows – продукт створивши вікно і приготувавши середовище, продукт передає керування Windows і надалі до завершення роботи продукт отримає керування від Windows тільки після приходу повідомлень, які належать даному продукту.
Створивши вікно продуктів програма WinMain організовує цикл повідомлень. Основним призначенням обробки черги повідомлень даного продукту, яке створює і підтримує Windows. Повідомлення, які розміщуються в Windows в черзі продуктів беруться з черги циклом обробки повідомлень і направляються не на пряму, а через Windows в функцію керування відповідним вікном продукту. Чому не можна викликати функцію вікна на пряму? Тому, що це протиречить прийнятій технології. Windows – об’єкти спілкуються між собою тільки шляхом повідомлень.
Після того як WinMain виконує організацію дії викли вікон можливий шляхом передачі повідомлень. Цикл обробки повідомлення Message бере повідомлення і відправляє у ф. вікно. Ця функція вміщує команди що виконують реальні дії, а саме виконання команд менб продуктів, виконує вивід у вікні граф і тексту що відносяться власнедо продукту. Не всі мовідомлення попадають у ф. вікна продукту через цикл обробки повідомлень.
WINMain
Цикл обробки повідомлень
WinProc
Windows продукт
WМ-Destroy
Системна черга
Черга продукту
Вікно продукту
Вхід
Windows
Вихід
WМ - Вихід
Повідомлення вікна Wind безпосередньо у ф. вікна прод.
Недоліки: якщо користувач закрив вікно, то форм повідомлень WM-DESTROY і закрив вікно. Воно відразу направлено у ф. вікна продукту. Після виконання необхідних операцій: звільнити пам*ять, вилучити об. Ф. вікна прад повинна повідомити головній ф. WinMain про те що вікно закрите і продукт має завершує свою роботу.
WndProc форм WM-Quit і передає в чергу продукту. Коли цикл обробки повідомлення бере з черги прод це повідомлення відбув вихід з циклу обробки повід і продукт завершення роботу. Windows продукт не звертає зо буферу клавіатури. Всі символи що вводять з клави. Windows р...